/**
 * ===========================================================================
 *
 *       Filename:  protocal.h
 *
 *    Description:  learn more
 *
 *        Version:  1.0
 *        Created:  04/14/09 22:42:33
 *       Revision:  none
 *       Compiler:  gcc
 *
 *         Author:  Author (mn), Email@xxx.xxx
 *        Company:  xxx xxx
 *
 * ===========================================================================
 */

#ifndef __PROTOCAL_H__
#define __PROTOCAL_H__

#define MAGICNUM 	13579		// 协议头,标识此协议.
#define VERNUM		24680		// 版本号.

struct proto_head_t
{
	int magic;		// 协议标识.
	int num;		// 协议号.
	int ver;		// 版本.
	int flag;		// 特殊用途标识.
	int len;		// 消息体长度.
};

////////////////////////////////////////////////////////////////////////

// 部分常用长度定义.
#define LONG_STR_MAX 	256
#define SHOAT_STR_MAX 	64
#define STR_MAX 		32
#define SMALL_STR_MAX 	16
#define ARRAY_MAX 		16

// 用户基本信息.
struct user_info_t {
	unsigned long user_id;
	char user_name[STR_MAX];
};

// 群组基本信息.
struct group_info_t {
	unsigned long group_id;
	char group_name[STR_MAX];
};

////////////////////////////////////////////////////////////////////////

// 获取群组列表.
#define MSG_GROUP_LIST_ASK    	10001
struct group_list_ask_t {
	char title[STR_MAX];
};

// 返回群组列表.
#define MSG_GROUP_LIST_REPLY     	10002
struct group_list_reply_t {
	unsigned int group_count;
	struct group_info_t group_list[ARRAY_MAX];
	int result;
};

// 创建群组请求.
#define MSG_GROUP_CREATE_ASK	10003
struct group_create_ask_t {
	char group_name[STR_MAX];
};

// 创建群组应答.
#define MSG_GROUP_CREATE_REPLY 	10004
struct group_create_reply_t {
	unsigned long group_id;
	char group_name[STR_MAX];
	int result;
};

// 用户加入群组请求.
#define MSG_USER_JOIN_ASK		10005
struct user_join_ask_t {
	unsigned long group_id;
	char user_name[STR_MAX];
};

// 用户加入群组应答.
#define MSG_USER_JOIN_REPLY		10006
struct user_join_reply_t {
	unsigned long user_id;
	unsigned long group_id;
	int result;
};

// 用户退出消息.
#define MSG_USER_QUIT_ASK		10007
struct user_quit_ask_t {
	unsigned long user_id;
	unsigned long group_id;
};

// 用户发送消息.
#define MSG_USER_SEND		10008
struct user_send_t {
	unsigned long user_id;
	unsigned long group_id;
	char msg[LONG_STR_MAX];
};

// 用户接收消息.
#define MSG_USER_RECEIVE	10009
struct user_receive_t {
	unsigned long user_id;
	unsigned long group_id;
	char msg[LONG_STR_MAX];
};

// 获取用户列表.
#define MSG_USER_LIST_ASK    	10010
struct user_list_ask_t {
	unsigned long group_id;
};

// 返回用户列表.
#define MSG_USER_LIST_REPLY     	10011
struct user_list_reply_t {
	unsigned long group_id;
	unsigned int user_count;
	struct user_info_t user_list[ARRAY_MAX];
	int result;
};

#endif // __PROTOCAL_H__

